// emojiParagraphMatcher.ts
import { edw,batch } from 'edw';
import {keyword} from './data';

// Emoji数据类型定义
interface EmojiEntry {
  emoji: string;
  keywords: string[];
  description: string;
}

// 将data.ts中的emoji数据转换为搜索格式
// 注意：在实际使用中，您需要正确导入data.ts文件
const emojiData: Record<string, string[]> = keyword;

// 将emoji数据转换为便于搜索的格式
const emojiList: EmojiEntry[] = Object.entries(emojiData)
  .map(([emoji, keywords]) => ({
    emoji,
    keywords,
    description: keywords.join(' ')
  }));

/**
 * 在一段文本中匹配相关的emoji
 * @param text 输入的文本
 * @param limit 返回emoji数量限制
 * @returns 匹配的emoji列表
 */
export function matchEmojisInText(text: string, limit: number = 10): (EmojiEntry & { similarity: number })[] {
  // 使用EDW批量计算相似度
  const results = batch(
    emojiList.map(item => item.description),
    text,
    'word' // 使用词语级匹配
  );
  
  // 关联emoji信息并按相似度排序
  return results
    .map((result, index) => ({
      ...emojiList[index],
      similarity: result.similarity
    }))
    .filter(item => item.similarity > 0.1) // 过滤掉相似度太低的结果
    .sort((a, b) => b.similarity - a.similarity) // 按相似度降序排列
    .slice(0, limit); // 限制返回数量
}

/**
 * 为文本添加相关的emoji
 * @param text 输入文本
 * @param maxEmojis 最大添加emoji数量
 * @returns 添加emoji后的文本
 */
export function addEmojisToText(text: string, maxEmojis: number = 3): string {
  const matchedEmojis = matchEmojisInText(text, maxEmojis);
  
  if (matchedEmojis.length === 0) {
    return text;
  }
  
  // 将匹配度最高的emoji添加到文本开头
  const topEmojis = matchedEmojis.slice(0, maxEmojis).map(item => item.emoji).join(' ');
  return `${topEmojis} ${text}`;
}

/**
 * 分析文本情感并返回相关emoji
 * @param text 输入文本
 * @returns 情感分析结果和相关emoji
 */
export function analyzeTextEmotion(text: string): { 
  emotion: 'positive' | 'negative' | 'neutral' | 'mixed'; 
  emojis: (EmojiEntry & { similarity: number })[] 
} {
  const matchedEmojis = matchEmojisInText(text, 5);
  
  // 简单的情感分析逻辑
  const positiveKeywords = ['开心', '高兴', '喜欢', '爱', '棒', '好', '赞', '优秀', '完美', '成功'];
  const negativeKeywords = ['难过', '悲伤', '讨厌', '差', '坏', '糟糕', '失败', '问题', '困难', '痛苦'];
  
  let positiveScore = 0;
  let negativeScore = 0;
  
  // 检查文本中是否包含情感关键词
  positiveKeywords.forEach(keyword => {
    if (text.includes(keyword)) positiveScore++;
  });
  
  negativeKeywords.forEach(keyword => {
    if (text.includes(keyword)) negativeScore++;
  });
  
  // 根据匹配到的emoji进一步判断情感
  matchedEmojis.forEach(item => {
    if (item.keywords.some(kw => positiveKeywords.includes(kw))) {
      positiveScore += item.similarity;
    }
    if (item.keywords.some(kw => negativeKeywords.includes(kw))) {
      negativeScore += item.similarity;
    }
  });
  
  let emotion: 'positive' | 'negative' | 'neutral' | 'mixed' = 'neutral';
  if (positiveScore > negativeScore && positiveScore > 0) {
    emotion = 'positive';
  } else if (negativeScore > positiveScore && negativeScore > 0) {
    emotion = 'negative';
  } else if (positiveScore > 0 && negativeScore > 0) {
    emotion = 'mixed';
  }
  
  return { emotion, emojis: matchedEmojis };
}

// 使用示例
console.log('=== 文本Emoji匹配示例 ===\n');
  
// 示例文本
const texts = [
  "今天天气真好，阳光明媚，我感到非常开心！",
  "这个项目太难了，我遇到了很多问题，感到很沮丧。",
  "恭喜你取得了优异的成绩，太棒了！",
  "今天的会议非常重要，我们需要认真讨论。",
  "昨晚上看了一场精彩的电影，情节非常搞笑。"
];

texts.forEach((text, index) => {
  console.log(`${index + 1}. 原文: "${text}"`);
  
  // 匹配相关emoji
  const matchedEmojis = matchEmojisInText(text, 5);
  console.log(`   匹配的Emoji: ${matchedEmojis.map(item => `${item.emoji}(${(item.similarity * 100).toFixed(1)}%)`).join(' ')}`);
  
  // 为文本添加emoji
  const textWithEmojis = addEmojisToText(text, 2);
  console.log(`   添加Emoji后: "${textWithEmojis}"`);
  
  // 情感分析
  const emotionAnalysis = analyzeTextEmotion(text);
  console.log(`   情感分析: ${emotionAnalysis.emotion}`);
  console.log(`   情感Emoji: ${emotionAnalysis.emojis.slice(0, 3).map(item => item.emoji).join(' ')}\n`);
});